package com.t.bricks.bussiness.controller.dutyandperson;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.t.bricks.bussiness.controller.common.BaseController;
import com.t.bricks.bussiness.db.entity.dutyandperson.DutyAndPerson;
import com.t.bricks.bussiness.model.dutyandperson.ConditionDutyAndPerson;
import com.t.bricks.bussiness.service.dutyandperson.DutyAndPersonService;
import com.t.bricks.model.MsgEmity;

@RestController
@Api(value="人员与职务关系表", tags={"基本业务-人员与职务关系表操作接口"})
@RequestMapping("/duty/and/person/")
public class DutyAndPersonController extends BaseController<DutyAndPersonService<DutyAndPerson>, DutyAndPerson, ConditionDutyAndPerson> {

	/**
	 * 控制操作,首位9不参与用6个数代表开关,0为不限制,1为限制
	 * 6个数的控制分别是:删除、修改、查询、导出、统计、步骤值可逆
	 * 其中前5个为'是否仅创建者可操作'后续为其它控制开关
	 */
	protected int enableTag = 9000001;

	/**
	 * 设置 检查待新增内容是否存在重复数据(多字段组合重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatCombination成员,若返回null则不进行重复校验
	 */
	@Override
	protected List<String> setCheckRepeatCombination() {
		return Arrays.asList("sPersonId", "sDutyId");
	}

	/**
	 * 设置 检查待新增内容是否存在重复数据(单独字段重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatAlone成员,若返回null则不进行重复校验
	 */
	@Override
	protected Map<String, Integer> setCheckRepeatAlone() {
		return null;
	}

	/**
	 * 批量保存人员所属职务关联信息
	 * 注意:若职务信息为空则会清除所有该人员与职务的关联信息
	 * @param sPersonId 人员编号
	 * @param sDutyList 职务编号集合,以','分隔
	 * @return
	 */
	//[start]
	@ApiOperation(value="批量保存人员所属职务关联信息", notes="若职务信息为空则会清除所有该人员与职务的关联信息")
	@ApiImplicitParams({
		@ApiImplicitParam(name="sPersonId", value="人员编号", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="sDutyList", value="职务编号集合以','分隔", dataType="String", paramType="query", required=false),
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="人员编号参数为空"),
		@ApiResponse(code=7001, message="关联未能得到预期影响值(预期大于等于1)"),
		@ApiResponse(code=7002, message="操作关联时发生异常"),
		@ApiResponse(code=7101, message="解除旧有关系链失败"),
		@ApiResponse(code=7102, message="操作数据库异常"),
		@ApiResponse(code=7999, message="关联成功")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/save")
	public MsgEmity save(String sPersonId, String sDutyList) {
		return this.service().save(sPersonId, sDutyList);
	}
	
	/**
	 * 根据人员编号取人员与职务关联信息
	 * @param sPersonId 人员编号
	 * @return
	 */
	//[start]
	@ApiOperation(value="根据人员编号取人员与职务关联信息", response=DutyAndPerson.class)
	@ApiImplicitParams({
		@ApiImplicitParam(name="sPersonId", value="人员编号", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值|Json数据对象集合}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="人员编号参数为空"),
		@ApiResponse(code=7001, message="查询操作失败"),
		@ApiResponse(code=7002, message="查询请求失败，请查看异常日志"),
		@ApiResponse(code=7003, message="7003~8998为修改时发生的其它错误")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/find/deparment")
	public MsgEmity findBysPersonId(String sPersonId) {
		return this.service().findBysPersonId(sPersonId);
	}
	
}
